package tech.aistar.prj.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

    /**
     * 本类用来演示: 自定义的日期工具类
     *
     * @author: success
     * @date: 2022/1/11 8:44 上午
     */


        /**
         * Date->指定pattern的String
         *
         * @param date
         * @param pattern
         * @return
         */
        public static String format(Date date, String pattern) {//Date->String
            if (date == null)//考虑date这个数据可能获取失败
                return null;

            SimpleDateFormat sdf = new SimpleDateFormat(pattern);

            return sdf.format(date);
        }

        /**
         * 将字符串解析成日期
         *
         * @param strDate
         * @param pattern
         * @return
         */
        public static Date parse(String strDate, String pattern) {
            if (strDate == null || strDate.trim().length() == 0)
                return null;
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            Date date = null;


            try {
                date = sdf.parse(strDate);
            } catch (ParseException e) {
                e.printStackTrace();
            }


            return date;
        }

        /**
         * 根据指定的年月日来构建指定的日期对象
         *
         * @param year
         * @param month
         * @param date
         * @return
         */
        public static Date createDate(int year, int month, int date) {
            Calendar cal = Calendar.getInstance();
            cal.set(year, month - 1, date);
            //Calendar->Date
            return cal.getTime();
        }

        public static int getWeek(int year, int month, int date) {
            Calendar cal = Calendar.getInstance();
            //重新设置值 - 构造出需要的日历对象
            cal.set(year, month - 1, date);
            return cal.get(Calendar.DAY_OF_WEEK) - 1;
        }

        /**
         * 判断某年是否为闰年
         *
         * @param year
         * @return true/false
         */
        public static boolean isLeapYear(int year) {
            //if((year%400==0) || (year%4==0 && year%100!=0)){
            //    return true;
            //}else{
            //    return false;
            //}

            //{}中语句只有一条,可以省略不写
            //if((year%400==0) || (year%4==0 && year%100!=0))
            //    return true;
            //else
            //    return false;

            //return 除了可以返回一个结果,还可以用来结束整个方法的执行.
            //return语句一旦执行到了,那么这个方法就结束了,下面的代码是不会执行的 - return特性

            //if语句可以单独使用
            //if((year%400==0) || (year%4==0 && year%100!=0))
            //    return true;
            //return false;

            return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
        }

        /**
         * 返回某年某月的最大天数
         *
         * @param year
         * @param month
         * @return
         */
        public static int getMaxDay(int year, int month) {
            //定义一个变量,用来保存最大天数
            //建议定义变量的时候给定一个初始值
            //原因 - 变量在使用之前需要先进行初始化
            int max = -1;
            if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
                max = 31;
            else if (month == 2) {
                max = 28;
                //判断一下是否为闰年
                //boolean flag = isLeapYear(year);
                //if(isLeapYear(year))
                //    max++;

                //三目运算符
                max = isLeapYear(year) ? 29 : 28;
            } else {//小月
                max = 30;
            }
            return max;
        }
    }

